package com.spboot.app.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jntoo.db.utils.StringUtil;
import com.spboot.app.mapper.GonggaoMapper;
import com.spboot.app.mapper.TonzhiMapper;
import com.spboot.app.pojo.Gonggao;
import com.spboot.app.pojo.Tonzhi;
import com.spboot.app.utils.Info;
import com.spboot.app.utils.R;
import com.spboot.app.utils.SelectPage;
import com.spboot.app.utils.SessionFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class TonzhiService {

    // 获取数据库操作类mapper
    @Resource
    private TonzhiMapper mapper;

    /**
     *  根据id 获取一行数据
     */
    public R<Tonzhi> findById(Integer id) {
        return R.success(mapper.selectById(id));
    }

    /**
     *  根据Wrapper 对象进行数据筛选
     */
    public R<List<Tonzhi>> selectAll(Wrapper<Tonzhi> query) {
        return R.success(mapper.selectList(query));
    }

    /**
     *  直接筛选所有数据
     */
    public R<List<Tonzhi>> selectAll() {
        QueryWrapper<Tonzhi> wrapper = Wrappers.query();
        wrapper.orderByDesc("id");
        return selectAll(wrapper);
    }

    /**
     *  根据map 条件筛选数据
     *
     */
    public R selectAll(Map<String, Object> map) {
        // 获取筛选数据
        SelectPage selectPage = new SelectPage(map, 10, "id", "DESC");
        // 将提交的参数转换成 mybatisplus 的QueryWrapper 筛选数据对象，执行动态查询
        QueryWrapper<Tonzhi> wrapper = mapToWrapper(map);
        // 设置排序
        wrapper.orderBy(true, selectPage.isAsc(), selectPage.getOrderby());
        return selectAll(wrapper);
    }

    /**
     *  根据map 条件筛选数据并分页
     *
     */
    public R selectPages(Map<String, Object> map) {
        // 获取筛选数据
        SelectPage selectPage = new SelectPage(map, 10, "id", "DESC");
        // 将提交的参数转换成 mybatisplus 的QueryWrapper 筛选数据对象，执行动态查询
        QueryWrapper<Tonzhi> wrapper = mapToWrapper(map);
        // 设置排序
        wrapper.orderBy(true, selectPage.isAsc(), selectPage.getOrderby());
        // 设置分页数据
        Page page = new Page(selectPage.getPage(), selectPage.getPagesize());
        return selectPages(wrapper, page);
    }

    /**
     *  根据map 条件筛选faburen字段等于session.username的数据并分页
     *
     */
    public R selectPagesFaburen(Map<String, Object> map) {
        // 获取前端给到列表基础参数
        SelectPage selectPage = new SelectPage(map, 10, "id", "DESC");
        // 将map参数转换为mybatis-plus的QueryWrapper类
        QueryWrapper<Tonzhi> wrapper = mapToWrapper(map);
        // 设置为当前角色
        wrapper.eq("sendPerson", SessionFactory.getUsername());
        wrapper.orderBy(true, selectPage.isAsc(), selectPage.getOrderby());
        Page page = new Page(selectPage.getPage(), selectPage.getPagesize());
        return selectPages(wrapper, page);
    }

    /**
     *   将提交的参数转换成 mybatisplus 的QueryWrapper 筛选数据对象
     */
    public QueryWrapper<Tonzhi> mapToWrapper(Map<String, Object> map) {
        // 创建 QueryWrapper 对象
        QueryWrapper<Tonzhi> wrapper = Wrappers.query();

        String where = " 1=1 ";
        // 以下是判断搜索框中是否有输入内容，判断是否前台是否有填写相关条件，符合则写入sql搜索语句

        if (!StringUtil.isNullOrEmpty(map.get("id"))) {
            wrapper.like("id", map.get("id"));
        }
        if (!StringUtil.isNullOrEmpty(map.get("title"))) {
            wrapper.like("title", map.get("title"));
        }

        if (map.containsKey("session_name")) {
            wrapper.eq(map.get("session_name").toString(), SessionFactory.getUsername());
        }

        wrapper.apply(where);
        return wrapper;
    }

    public R selectPages(QueryWrapper<Tonzhi> wrapper, IPage page) {
        Map result = new HashMap();
        result.put("lists", mapper.selectPage(page, wrapper));

        return R.success(result);
    }

    /**
     * 插入通知数据
     * @param entityData 插入的对象
     * @param post 提交的数据
     * @return 是否处理成功
     */
    public R insert(Tonzhi entityData, Map post) {
        // 判断是否有填写编号。
//        if (StringUtil.isNullOrEmpty(entityData.getId())) {
//            return R.error("请填写编号");
//        }

        // 判断是否有填写标题。
        if (StringUtil.isNullOrEmpty(entityData.getTitle())) {
            return R.error("请填写标题");
        }

        Info.handlerNullEntity(entityData);
        entityData.setSendTime(Info.getDateStr());

        entityData.setId(null);
        mapper.insert(entityData);
        if (entityData.getId() != null) {
            return findById(entityData.getId());
        } else {
            return R.error("插入错误");
        }
    }

    /**
     * 根据id进行更新通知数据
     * @param entityData 更新的数据
     * @param post 提交的数据
     * @return 是否处理成功
     */
    public R<Object> update(Tonzhi entityData, Map post) {
        // 判断是否有填写编号。
        if (StringUtil.isNullOrEmpty(entityData.getId())) {
            return R.error("请填写编号");
        }

        // 判断是否有填写标题。
        if (StringUtil.isNullOrEmpty(entityData.getTitle())) {
            return R.error("请填写标题");
        }

        mapper.updateById(entityData);

        return R.success(mapper.selectById(entityData.getId()));
    }
}

